파이썬의 모든 것은 객체다

파이썬의 모든 것은 객체다.
객체란 무엇인가?
객체에는 두가지가 있다. 불변객체와 가변객체.
불변객체란 str, int, tuple 등 수정할 수 없는 객체를 뜻한다.
가변객체란 list, set, dict 등 수정할 수 있는 객체를 뜻한다.

그래서 파이썬의 모든 것이 객체란게 무슨 의미인가?
예를 들어보자,

a = 3

이런 코드가 있다. 여기서 객체는 몇개일까?
2개다.
a와 3은 모두 객체이다. 이때, a는 3을 가리키는 변수로서, 일종의 이름표 역할을 한다.

b = a

새로 추가된 객체는 몇개인가?
1개, 즉 b이다.
b는 변수 a를 참조한다. 그 말뜻은, a가 가리키는 객체인 3을 가리키게 된다는 것이다.

따라서 a의 값도 3이고, b의 값도 3이지만, 객체는 4개가 아닌 3개다.
만약, 다음과 같은 코드를 추가한다면 어떨까?

b = b + 1

이것은 a와 b가 모두 참조하고 있는 객체인 3에 +1 이라는 연산을 수행하고자 하게된다.
하지만 3은 불변객체이다. 따라서 변경할 수 없기 때문에, 4라는 객체를 새로 생성한 뒤, 참조하게 된다.

print(a, b)
>>> 3, 4

이것만으로는 잘 와닿지 않을 수 있다.
좀 더 자세히 이해하기 위해서는 가변객체의 예시도 들어볼 필요가 있다.

a = list()
b = a

자 이번에도 객체는 3개이다.
하지만, 이번에 두 변수에 의해 참조된 객체는 가변객치이다.
무엇이 다른지 살펴보자.

b = b + [1]
print(a, b)
>>> [1], [1]

의문이 들 수 있다. 왜 a의 값까지 변경되었는지.

이것은 a와 b가 모두 참조하고 있는 객체인 []에 +[1] 이라는 연산을 수행한 결과일 뿐이다.
다만, 아까와 같이 불변객체가 아니기 때문에, 새로운 객체를 생성하여 참조하는 행위가 발생하지 않았을 뿐이다.